/******************************************************************************* * Copyright (c) 2010, G. Weirich and Elexis * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * G. Weirich - initial implementation * *******************************************************************************/ package ch.elexis.impfplan.view; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.RowLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import ch.elexis.core.ui.icons.Images; import ch.elexis.core.ui.util.SWTHelper; import ch.elexis.impfplan.controller.ImpfplanController; import ch.elexis.impfplan.model.VaccinationType; public class ImpfplanPreferences extends PreferencePage implements IWorkbenchPreferencePage { private IAction removeAction, editAction; private TableViewer tv; public ImpfplanPreferences(){ makeActions(); } @Override protected Control createContents(Composite parent){ Composite ret = new Composite(parent, SWT.NONE); ret.setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); ret.setLayout(new GridLayout()); tv = new TableViewer(ret); tv.getControl().setLayoutData(SWTHelper.getFillGridData(1, true, 1, true)); tv.setContentProvider(new ContentProviderAdapter() { @Override public Object[] getElements(Object arg0){ return ImpfplanController.allVaccs().toArray(); } }); tv.setLabelProvider(new LabelProvider() { @Override public String getText(Object element){ if (element instanceof VaccinationType) { return ((VaccinationType) element).getLabel(); } return "?"; //$NON-NLS-1$ } }); tv.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event){ edit(); } }); Composite cButtons = new Composite(ret, SWT.NONE); cButtons.setLayoutData(SWTHelper.getFillGridData(1, true, 1, false)); cButtons.setLayout(new RowLayout(SWT.HORIZONTAL)); Button bAdd = new Button(cButtons, SWT.PUSH); bAdd.setText(Messages.ImpfplanPreferences_addCaption); bAdd.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ EditVaccinationDialog dlg = new EditVaccinationDialog(getShell(), new VaccinationType( Messages.ImpfplanPreferences_nameDummy, Messages.ImpfplanPreferences_vaccDummy)); if (dlg.open() == Dialog.OK) { tv.refresh(); } } }); MenuManager menu = new MenuManager(); menu.add(removeAction); tv.getControl().setMenu(menu.createContextMenu(tv.getControl())); tv.setInput(this); return ret; } @Override public void init(IWorkbench workbench){ // TODO Auto-generated method stub } private void edit(){ IStructuredSelection sel = (IStructuredSelection) tv.getSelection(); if (!sel.isEmpty()) { VaccinationType t = (VaccinationType) sel.getFirstElement(); if (new EditVaccinationDialog(getShell(), t).open() == Dialog.OK) { tv.refresh(true); } } } private void makeActions(){ removeAction = new Action(Messages.ImpfplanPreferences_removeVaccination) { { setImageDescriptor(Images.IMG_DELETE.getImageDescriptor()); setToolTipText(Messages.ImpfplanPreferences_removeVaccWarning); } @Override public void run(){ IStructuredSelection sel = (IStructuredSelection) tv.getSelection(); if (!sel.isEmpty()) { VaccinationType t = (VaccinationType) sel.getFirstElement(); if (t.delete()) { tv.remove(sel.getFirstElement()); } } } }; } }